"""
https://leetcode.cn/problems/symmetric-tree/description/


101. 对称二叉树
已解答
简单
相关标签
premium lock icon
相关企业
给你一个二叉树的根节点 root ， 检查它是否轴对称。

 

示例 1：


输入：root = [1,2,2,3,4,4,3]
输出：true
示例 2：


输入：root = [1,2,2,null,3,null,3]
输出：false
 

提示：

树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100
 

进阶：你可以运用递归和迭代两种方法解决这个问题吗？


"""

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from typing import Optional
from tree_node import TreeNode,build_tree_node


class Solution:

    """
    实际就是判定左子树和右子树，以对称的方式遍历，是否相等。

    递归方法解，比较直观，逻辑也简单些。
    
    """

    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True

        def compare(left,right):
            if not left and not right:
                return True
            if not (left and right):
                return False
            if left.val!=right.val:
                return False
            
            c1=compare(left.left,right.right)
            if not c1:
                return False
            return compare(left.right,right.left)
            

        return compare(root.left,root.right)
    
if __name__=='__main__':
    arr=[1,2,2]
    root=build_tree_node(arr)

    s=Solution()
    res=s.isSymmetric(root)
    print(res)